package com.nuanshui.heatedloan.userinfo.facade;

import java.util.HashMap;
import java.util.List;
import com.nuanshui.heatedloan.userinfo.model.SafeToken;
import com.nuanshui.heatedloan.userinfo.model.UserDeviceToken;


public interface UserTokenService {

	/**
	 * 根据用户id和设别的类型获取UserToken
	 * 
	 * @param
	 * @author guohao
	 * @date 2015年4月15日 下午3:42:53
	 */
    List<UserDeviceToken> selectByUserIdAndDeviceType(
            String userId, String deviceType);

	/**
	 * 根据用户ID获取对应的token
	 *
	 * @param
	 * @author guohao
	 * @date 2015年4月16日 上午10:24:28
	 */
	List<HashMap<String, Object>> selectUserTokensByUserIds(List<String> userIds, String userId, String type, String clientType);

	/**
	 * 增加一条记录
	 * 
	 * @param
	 * @author guohao
	 * @date 2015年4月15日 下午4:20:54
	 */
    void addUserToken(UserDeviceToken userDeviceToken);
    
    void addUserTokenOnAsyn(String deviceToken, String deviceType, String version, String userId);

	/**
	 * 更新用户某个设备的某个 token
	 * 
	 * @param
	 * @author guohao
	 * @date 2015年4月15日 下午4:41:38
	 */
    void updateUserToken(UserDeviceToken userDeviceToken);

	/**
	 * 删除用户的 某个设备
	 * 
	 * @param
	 * @author guohao
	 * @date 2015年4月15日 下午4:57:25
	 */
    void deleteByUserIdAndDeviceType(Long userId,
                                     String deviceToken);

	/**
	 * 设置用户id为Null
	 * @param userId
	 */
    void setUserIdNullByUserId(String userId);
	/**
	 * 删除deviceToken
	 * @param deviceToken
	 * @param deviceType
	 */
    void deleteByDeviceTokenAndDeviceType(String deviceToken,
                                          String deviceType);
	
	/**
	 * 更新device token
	 * @param deviceToken
	 * @param deviceType
	 * @param version
	 * @param userId
	 */
    void updateDeviceToken(String deviceToken, String deviceType,
                           String version, String userId);
	/**
	 * 保存safeToken
	 * @param safeToken
	 */
    void saveSafeToken(SafeToken safeToken);
	/**
	 * 获取safeToken的个数
	 * @param token
	 * @return
	 */
    Integer loadTokenCount(String token);

	/**
	 * 校验salftoken是否合法
	 * @param @param safeToken
	 * @param @return
	 * @author guohao
	 * @date 2016年6月27日 上午9:28:17
	 * @since $
	 */
	boolean validSafeToken(String safeToken);
	
	/**
	 * 保存用户和safeToken绑定关系
	 * @param safeToken
	 * @param userId
	 */
    void saveUserSafeToken(String safeToken, String userId);
	/**
	 * 删除用户和safeToken的绑定关系
	 * @param safeToken
	 * @param userId
	 */
    void delUserSafeToken(String safeToken, String userId);

	/**
	 * 通过用户id来获取userToken
	 * @param userId
	 * @return
	 */
	UserDeviceToken loadUserTokenByUserId(String userId);
	
}
